<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>列表</title>
    <script src="../../js/vue.js"></script>
</head>

<body>
    <div id="root">
        <!-- 遍历数据 -->
        <input type="text" placeholder="输入名字" v-model="keywords">
        <button @click="sortType = 2">年龄升序</button>
        <button @click="sortType = 1">年龄降序</button>
        <button @click="sortType = 0">原顺序</button>

        <ul>
            <li v-for="(p,index) in filPersons" :key="p.id">
                {{p.name}}-{{p.age}}
                <input type="text">
            </li>
        </ul>
 
    </div>


    <script>
        Vue.config.productionTip = false;
        new Vue({
            el: "#root",
            data: {
                keywords: '',
                sortType:0, // 0原顺序， 1降序，2升序
                persons: [
                    { id: '001', name: "马冬", age: 30 },
                    { id: '002', name: "马冬梅", age: 20 },
                    { id: '004', name: "王艳", age: 18 },
                    { id: '003', name: "梅艳芳", age: 19 }
                ]
            },
            // compted(计算属性) 和 watch(观察模式) 都能实现功能时 优先使用computed
            computed: {
                filPersons :{
                    // 必须设置get？set？  get里写初识数据
                    get(){
                        // 返回filPersons
                        const newArr = this.filPersons = this.persons.filter((p) => {
                            // 返回计算结果
                            return p.name.indexOf(this.keywords) !== -1;
                        })
                        // 判断排序
                        // arr = [1,3,2,9,7,8,5,6,4] arr.sort(p1,p2) 升序 p1-p2， p2-p1
                        if(this.sortType){
                            newArr.sort((p1,p2)=>{
                                return this.sortType === 1 ? p2.age-p1.age : p1.age-p2.age;
                            })
                        }
                        return newArr;
                    },
                   // set什么时候调用？ 当被修改时
                    set(val){
                        console.log(val)
                    }
                }
            }
        })
    </script>

</body>

</html>